package com.example.demo.threadDemo.thtradPools;

import java.util.concurrent.*;

/**
 * @Description ThtradPoolTest1
 * @Author songchuanlong
 * @Date 2025-05-11
 */


/**
 * 线程池的创建
 * new ThreadPoolExecutor.AbortPolicy()  直接抛异常，无法解决这个任务
 */
public class ThtradPoolTest1 {
    public static void main(String[] args) {
        //1、通过ThreadPoolExecutor创建一个线程池对象
        ExecutorService pool = new ThreadPoolExecutor(3,
                5,
                8,
                TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(4),
                Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.AbortPolicy());

        Runnable target = new MyRunnnable();
        //核心线程处理
        pool.execute(target);//线程池会自动创建一个新线程，自动处理这个任务，自动执行的
        pool.execute(target);//线程池会自动创建一个新线程，自动处理这个任务，自动执行的
        pool.execute(target);//线程池会自动创建一个新线程，自动处理这个任务，自动执行的
        //任务队列排满
        pool.execute(target);//复用前面的核心线程
        pool.execute(target);//复用前面的核心线程
        pool.execute(target);//复用前面的核心线程
        pool.execute(target);//复用前面的核心线程
        //满足上面两个条件，才会创建临时线程
        pool.execute(target);//复用前面的核心线程
        pool.execute(target);//复用前面的核心线程
        //再来多一个线程
        pool.execute(target);//复用前面的核心线程

        //pool.shutdown();//等若线程池的任务全部执行完毕后，再关闭线程池
    }
}
